package br.com.petsis.entity;

// Generated 18/05/2011 10:52:24 by Hibernate Tools 3.3.0.GA

import static javax.persistence.GenerationType.IDENTITY;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PostLoad;
import javax.persistence.PostPersist;
import javax.persistence.PostRemove;
import javax.persistence.PostUpdate;
import javax.persistence.PrePersist;
import javax.persistence.PreRemove;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.jboss.seam.Component;

import br.com.petsis.enumerations.TipoOperacaoEnum;
import br.com.petsis.funcionalidades.auditoria.AuditoriaController;

/**
 * Raca generated by hbm2java
 */
@Entity
@Table(name = "despesa")
public class Despesa implements java.io.Serializable {
	
	public static final Character TIPO_DESPESA_UNICA = 'U';
	public static final Character TIPO_DESPESA_MENSAL = 'M';
	public static final Character TIPO_DESPESA_ANUAL = 'A';

	private Integer idDespesa;
	private String dscDespesa;
	private Date dtaVencimento;
	private Date dtaPagamento;
	private String dscObservacao;
	private Character tpoDespesa;
	private Character flgAtivo;
	private MesDespesa mesDespesa;
	private Float vlrDespesa;
	
	@Transient
	private boolean selecionado;
	
	@Transient
	private TipoOperacaoEnum tipoOperacao;
	
	@Transient
	private String dadosAntigos;
	
	@PostLoad
	public void registrarDadosAntigos(){
		AuditoriaController auditoriaController = (AuditoriaController)Component.getInstance("auditoriaController");
		dadosAntigos = auditoriaController.recuperaDadosConcatenados(this);
	}
	
	@PostPersist
	@PostUpdate
	@PostRemove
	public void registrarAuditoria(){
		AuditoriaController auditoriaController = (AuditoriaController)Component.getInstance("auditoriaController");
		auditoriaController.registraLogAuditoria(this, tipoOperacao, dadosAntigos);
	}
	
	@PrePersist
	public void registrarTipoOperacaoInclusao(){
		tipoOperacao = TipoOperacaoEnum.INCLUSAO;
	}

	@PreRemove
	public void registrarTipoOperacaoExcluir(){
		tipoOperacao = TipoOperacaoEnum.EXCLUSAO;
	}
	
	@PreUpdate
	public void registrarTipoOperacaoAlteracao(){
		tipoOperacao = TipoOperacaoEnum.ALTERACAO;
	}

	public Despesa() {
	}
	
	public Despesa(Despesa despesa){
		this.dscDespesa = despesa.getDscDespesa();
		this.dtaVencimento = despesa.getDtaVencimento();
		this.tpoDespesa = despesa.getTpoDespesa();
		this.vlrDespesa = despesa.getVlrDespesa();
		this.flgAtivo = 'T';
	}
	
	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "id_despesa", unique = true, nullable = false)
	public Integer getIdDespesa() {
		return idDespesa;
	}

	public void setIdDespesa(Integer idDespesa) {
		this.idDespesa = idDespesa;
	}

	@Column(name = "dsc_despesa", nullable = false, length = 50)
	@NotNull
	@Length(max = 50)
	public String getDscDespesa() {
		return dscDespesa;
	}

	public void setDscDespesa(String dscDespesa) {
		this.dscDespesa = dscDespesa;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "dta_vencimento", nullable = false)
	@NotNull
	public Date getDtaVencimento() {
		return dtaVencimento;
	}

	public void setDtaVencimento(Date dtaVencimento) {
		this.dtaVencimento = dtaVencimento;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "dta_pagamento", nullable = true)
	public Date getDtaPagamento() {
		return dtaPagamento;
	}

	public void setDtaPagamento(Date dtaPagamento) {
		this.dtaPagamento = dtaPagamento;
	}

	@Column(name = "dsc_observacao", nullable = true, length = 200)
	public String getDscObservacao() {
		return dscObservacao;
	}

	public void setDscObservacao(String dscObservacao) {
		this.dscObservacao = dscObservacao;
	}

	@Column(name = "tpo_despesa", nullable = false, length = 1)
	public Character getTpoDespesa() {
		return tpoDespesa;
	}

	public void setTpoDespesa(Character tpoDespesa) {
		this.tpoDespesa = tpoDespesa;
	}

	@Column(name = "flg_ativo", nullable = false, length = 1)
	public Character getFlgAtivo() {
		return flgAtivo;
	}

	public void setFlgAtivo(Character flgAtivo) {
		this.flgAtivo = flgAtivo;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_MES_DESPESA", nullable = false)
	@NotNull
	public MesDespesa getMesDespesa() {
		return mesDespesa;
	}

	public void setMesDespesa(MesDespesa mesDespesa) {
		this.mesDespesa = mesDespesa;
	}

	@Column(name = "vlr_despesa", nullable = false)
	public Float getVlrDespesa() {
		return vlrDespesa;
	}

	public void setVlrDespesa(Float vlrDespesa) {
		this.vlrDespesa = vlrDespesa;
	}

	@Transient
	public boolean isSelecionado() {
		return selecionado;
	}
	
	public void setSelecionado(boolean selecionado) {
		this.selecionado = selecionado;
	}
	
	@Transient
	public String getTpoDespesaExtenso(){
		if(getTpoDespesa() != null){
			if(TIPO_DESPESA_UNICA.equals(getTpoDespesa())){
				return "Única";
			}else
			if(TIPO_DESPESA_MENSAL.equals(getTpoDespesa())){
				return "Mensal";
			}else
			if(TIPO_DESPESA_ANUAL.equals(getTpoDespesa())){
				return "Anual";
			}
		}
		return null;
	}
}
